package com.freeter.JsonUtil;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

import com.freeter.model.User;
import com.freeter.test.TimeTest;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class GsonTools {
	/*// 线程安全的
	private static final Gson GSON;
	static {
		GSON = new GsonBuilder().excludeFieldsWithoutExposeAnnotation()// 打开Export注解，但打开了这个注解,副作用，要转换和不转换都要加注解
				// .serializeNulls() //是否序列化空值
				.setDateFormat("yyyy-MM-dd HH:mm:ss")// 序列化日期格式 "yyyy-MM-dd"
				// .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)//会把字段首字母大写
				.setPrettyPrinting() // 自动格式化换行
				// .setVersion(1.0) //需要结合注解使用，有的字段在1。0的版本的时候解析，但0。1版本不解析
				.create();
	}*/
	
	private static Gson GSON = null;
    static {
        if (GSON == null) {
        	GSON = new Gson();
        }
    }

    private GsonTools() {
    }


	public static void main(String[] args) throws Exception {
		String jsonText = Txt2String.txt2String("data2.txt");
		Long nowTime = TimeTest.nowTime();
		// List list = fromJson(jsonText,ArrayList.class);

		List<User> list = new ArrayList<User>();
		/*
		 * /List<User> list = (List<User>)
		 * listFromJson(jsonText,list.getClass()); TimeTest.endTime(nowTime);
		 */

		
		List<User> persons =     GsonToList(jsonText,User[].class);

		/*for (User user : persons) {
			System.out.println(user.getPassword());
		}*/
		System.out.println(toJson(persons));
		;

	}

	/**
	 * @param <T>
	 * @param
	 * @param jsonString
	 * @param cls
	 * @return
	 * @return
	 */

	// 对象转换为json
	public static String toJson(Object object) {
		return GSON.toJson(object);
	}

	// JSON转换为对象1--普通类型
	public static <T> T fromJson(String json, Class<T> classOfT) {
		return GSON.fromJson(json, classOfT);
	}

	// JSON转换为对象-针对泛型的类型
	public static <T> T listFromJson(String json, Class<T> type) {

		return GSON.fromJson(json, TypeToken.get(type).getType());
	}

	 /**
     * Json转换成Map的List集合对象
     */
    public static <T> List<Map<String, Object>> toListMap(String json, Class<T> clz) {
        Type type = new TypeToken<List<Map<String, Object>>>() {
        }.getType();
        return GSON.fromJson(json, type);
    }

	
	  /**
     * 转成list 
     * 
     * @param gsonString
     * @param cls
     * @return  
     */
    public static <T> List<T> GsonToList(String json, Class<T []> type) {
    	T[] list = GSON.fromJson(json, type);
		return Arrays.asList(list);
    }

   
}